package com.wpp;


import org.junit.Test;

import java.util.*;

/*
 * 一，集合的概述
 * 1.集合、数组都是对多个数据进行存储操作的结构，简称Java容器
 *   说明：此时的存储，主要指的是内存层面的存储，不涉及到硬盘的存储等
 *
 * 2.1数组在存储多个数据方面的特点
 *   >一旦初始化以后，其长度就确定了---不可修改
 *   >数组一旦定义好以后。其元素的类型就确定了---
 *   >数组中提供的方法有限，且删除、插入等效率太低
 *   >数组存储数据的特点：有序，可重复。对于无序，不可重复的需求，不能满足。
 *Java集合可分为Collection和Map两种体系
 *   Collection接口：单列数据，定义了存取一组对象的方法的集合
 *       List:元素有序、可重复的集合--->动态数组
 *           ArrayList、作为list接口的主要实现类、线程不安全的，效率高，底层使用Object[]存储
 *           LinkedList、对于频繁的插入删除操作，使用此类比ArrayList效率高，底层使用的是双向链表存储
 *           Vector、作为list接口的古老实现，线程安全的，效率低，底层使用Object[]存储
 *           相同点：存储有序的，可重复的数据
 *           不同点：
 *       Set: 元素无序，不可重复的集合--->
 *           HashSet、LinkedHashSet、TreeSet
 *   Map接口：双列数据，保存具有映射关系：“key-value”的集合
 *      HashMap、LinkedHashMap、TreeMap、Hashtable、Properties
 *   hasnext():判断指针下方是否有元素，如果有就是true
 *   next():指针下移，指向指针所指位置的元素
 *
 * */
public class CollectionTest {

    @Test
    public void test() {
        Collection coll = new ArrayList();

        coll.add(123);
        coll.add("as");
        coll.add(new StringBuffer("dd"));
        System.out.println(coll);//[123, as, dd]

        Collection coll2 = new ArrayList();
        coll2.add(456);
        coll2.add("ggff");


        coll.addAll(coll2);
        System.out.println(coll);//[123, as, dd, 456]

        //coll.clear();
        System.out.println(coll + "=====");//[]=====

        System.out.println(coll.size());//0

        //判断当前集合中，是否包含obj
        boolean contains = coll.contains(coll2);//注意：如果是对象。必须要重写equals方法，比较的是内容
        System.out.println(contains);//false

        boolean empty = coll.isEmpty();
        System.out.println(empty);//true


        //containsAll()判断当前集合中是否全部包含coll2中的内容
        boolean b = coll.containsAll(coll2);
        System.out.println(b);

        //hashCode返回当前对象的哈希值
        System.out.println(coll.hashCode());


        //集合转数组
        Object[] objects = coll.toArray();
        for (int i = 0; i < objects.length; i++) {
            System.out.print(i);
        }
        System.out.println();


        //数组转集合
        List<String> strings = Arrays.asList(new String[]{"aa", "bb"});
        System.out.println(strings);

        //集合元素的遍历，迭代器设计模式。不对外暴露
        Iterator iterator = coll.iterator();
        //System.out.println(iterator.next());
        System.out.println("------------------------------");
        //推荐遍历方式
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        Vector<Object> objects1 = new Vector<>();

    }
}
